from django.db import models
from django.utils import timezone
import json

class DailyWorkProject(models.Model):
    """
    日工作计划项目模型
    对应前端的项目结构，每个项目可以包含多个工作项
    """
    
    # 实验类型选择
    EXPERIMENT_TYPE_CHOICES = [
        ('热学试验', '热学试验'),
        ('力学及电磁试验', '力学及电磁试验'),
        ('专项工作', '专项工作'),
        ('其他', '其他'),
    ]
    
    # 基本信息
    date = models.DateField(verbose_name='日期', help_text='工作计划日期')
    experiment_type = models.CharField(
        max_length=20, 
        choices=EXPERIMENT_TYPE_CHOICES, 
        verbose_name='实验类型',
        help_text='实验类型分类'
    )
    project_name = models.TextField(
        blank=True, 
        null=True, 
        verbose_name='试验项目',
        help_text='试验项目名称'
    )
    
    # 热学试验特有字段
    duty_day = models.TextField(
        blank=True, 
        null=True, 
        verbose_name='值班人（日）',
        help_text='9点-21点值班人员，多人用逗号分隔'
    )
    duty_night = models.TextField(
        blank=True, 
        null=True, 
        verbose_name='值班人（夜）',
        help_text='21点-9点值班人员，多人用逗号分隔'
    )
    
    # 排序字段
    order = models.IntegerField(default=0, verbose_name='排序', help_text='项目在同一天同一类型中的排序')
    
    # 时间戳
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    
    class Meta:
        db_table = 'daily_work_project'
        verbose_name = '日工作计划项目'
        verbose_name_plural = '日工作计划项目'
        ordering = ['date', 'experiment_type', 'order']
        indexes = [
            models.Index(fields=['date', 'experiment_type']),
        ]
    
    def __str__(self):
        return f'{self.date} - {self.experiment_type} - {self.project_name or "未命名项目"}'
    
    def get_duty_day_list(self):
        """获取日班值班人员列表"""
        if self.duty_day:
            return [p.strip() for p in self.duty_day.split(',') if p.strip()]
        return []
    
    def get_duty_night_list(self):
        """获取夜班值班人员列表"""
        if self.duty_night:
            return [p.strip() for p in self.duty_night.split(',') if p.strip()]
        return []
    
    def set_duty_day_list(self, personnel_list):
        """设置日班值班人员"""
        self.duty_day = ', '.join(personnel_list) if personnel_list else ''
    
    def set_duty_night_list(self, personnel_list):
        """设置夜班值班人员"""
        self.duty_night = ', '.join(personnel_list) if personnel_list else ''


class DailyWorkItem(models.Model):
    """
    日工作计划工作项模型
    对应前端的workItems结构，每个工作项属于一个项目
    """
    
    # 关联项目
    project = models.ForeignKey(
        DailyWorkProject, 
        on_delete=models.CASCADE, 
        related_name='work_items',
        verbose_name='所属项目'
    )
    
    # 工作内容
    content = models.TextField(
        blank=True, 
        null=True, 
        verbose_name='工作内容',
        help_text='具体工作内容描述'
    )
    
    # 人员安排
    responsible = models.TextField(
        blank=True, 
        null=True, 
        verbose_name='负责人',
        help_text='负责人姓名，多人用逗号分隔'
    )
    participants = models.TextField(
        blank=True, 
        null=True, 
        verbose_name='执行人',
        help_text='执行人姓名，多人用逗号分隔'
    )
    
    # 时间安排
    start_time = models.DateTimeField(
        blank=True,
        null=True,
        verbose_name='开始时间',
        help_text='工作项开始时间'
    )
    end_time = models.DateTimeField(
        blank=True,
        null=True,
        verbose_name='结束时间',
        help_text='工作项结束时间'
    )
    
    # 排序字段
    order = models.IntegerField(default=0, verbose_name='排序', help_text='工作项在项目中的排序')
    
    # 时间戳
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    
    class Meta:
        db_table = 'daily_work_item'
        verbose_name = '日工作计划工作项'
        verbose_name_plural = '日工作计划工作项'
        ordering = ['project', 'order']
    
    def __str__(self):
        return f'{self.project} - {self.content[:50] if self.content else "未命名工作项"}'
    
    def get_responsible_list(self):
        """获取负责人列表"""
        if self.responsible:
            return [p.strip() for p in self.responsible.split(',') if p.strip()]
        return []
    
    def get_participants_list(self):
        """获取执行人列表"""
        if self.participants:
            return [p.strip() for p in self.participants.split(',') if p.strip()]
        return []
    
    def set_responsible_list(self, personnel_list):
        """设置负责人列表"""
        self.responsible = ', '.join(personnel_list) if personnel_list else ''
    
    def set_participants_list(self, personnel_list):
        """设置执行人列表"""
        self.participants = ', '.join(personnel_list) if personnel_list else ''


# 为了向后兼容，保留原有的DailyWorkPlan模型作为别名
DailyWorkPlan = DailyWorkProject
